package com.leyou.common.advice;

import com.leyou.common.enums.ExceptionEnum;
import com.leyou.common.exception.LeYouException;
import com.leyou.common.vo.ExceptionResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

/**
 *   全局异常处理类
 *
 *
 * @Author: Rose
 * @Date: 2021/2/11 18:57
 * @version: 1.0.0
 */

/**
 *
 *  ControllerAdvice 默认情况下,会拦截所有加了 @Controller 的类
 *
 */
@Slf4j
@ControllerAdvice
public class CommonExceptionHandler {


    /**
     *
     *  ExceptionHandler 作用在方法上, 声明要处理的异常类型,可以有多个, 这里指定的是RuntimeException, 被声明的方法可以看做
     *  是一个SPringMvc 的handler
     *      参数是要处理的异常, 类型必须要匹配
     *      返回结果可以是ModelAndView , ResponseEntity 等, 基本与handler 类似.
     * @param e
     * @return
     */
    @ExceptionHandler(LeYouException.class)
    public  ResponseEntity<ExceptionResult>  handleException(LeYouException e) {

        ExceptionEnum exceptionEnum = e.getExceptionEnum();

        // 我们暂定返回状态码为 400, 然后从异常中获取友好提示信息
       return ResponseEntity.status(exceptionEnum.getCode()).body(new ExceptionResult(exceptionEnum)) ;
    }

}
